package vue.affectation;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
import metier.Affectation;
import metier.Eleve;
import metier.Stage;
import vue.commun.JPanRechercherEleve;
import vue.eleve.RechercherEleve;
import configuration.MessageAppli;
import ctr.affectation.GestAjoutAffectation;
import ctr.commun.CommunGest;

public class JPanAjoutAffectation extends RechercherEleve{
	private static final long serialVersionUID = 1L;
	private JTextField jTFNomEleve, jTFPrenomEleve;
	private JTextField jTFRechercheNomEleve, jTFRecherchePrenomEleve, jTFDateDebutAff, jTFDateFinAff;
	private JComboBox jCBGradeEleve, jCBAffectation;
	private JComboBox jCBStage, jCBRechercheEleve;
	private JTextField jTFDateNaissanceEleve;
	private String titre;
	private Eleve eleve=null;
	private JButton boutAjouterStage;

	
	public JPanAjoutAffectation(JPanAjoutAffectation jPanAjoutAffectation) {
		this.eleve = jPanAjoutAffectation.getEleve();
		afficher();
	}
	
	public JPanAjoutAffectation(String titre) {
		this.titre = titre;
		afficher();
	}
	
	/**
	 * Constructeur de base.
	 * Integration du panel rechercher
	 * @param titre
	 */
	public void afficher() {
		this.setBorder(new TitledBorder(titre));
		// Instanciation pour recuperer les objets en bases.
		// Oblige a passer par la couche controle pour acceder aux metiers.
		CommunGest communGest = new CommunGest();
		
		// Recuperation de la liste des stages.
		ArrayList<Stage> lStage = communGest.getListeStage();
		
		if ( !lStage.isEmpty())
		{
			// Creation du pannel de saisie pour la recherche
			JPanRechercherEleve jPanRechercherEleve = new JPanRechercherEleve(this);
			
			// Ajout du panel de recherche dans le panel Modifier eleve
			this.setLayout(new BorderLayout(2,1));
			this.add(jPanRechercherEleve, BorderLayout.NORTH);
			
			if(this.eleve!=null)
			{
				// Ajout du panel de modification.
				this.add(partieModif(lStage), BorderLayout.CENTER);
			}
		}
		else
		{
			JOptionPane.showMessageDialog(this, MessageAppli.MSG_STAGE_AUCUN_STAGE + ", ajout d'eleve impossible.", MessageAppli.MSG_ERREUR_TITRE, JOptionPane.WARNING_MESSAGE);
		}
	}
	
	/**
	 * Partie modification
	 * @param lStage
	 * @return
	 */
	private JPanel partieModif(ArrayList<Stage> lStage){
		CommunGest communGest = new CommunGest();
		ArrayList<Affectation> listeAffectation = communGest.getListeAffectation();
		
		// Creation du panel de modification
		JPanel modif = new JPanel(new GridLayout(5,1));
		modif.setBorder(new TitledBorder("Ajouter une affectation"));
		
			String libelleGrade = communGest.getGrade(this.getEleve().getIdGrade()).getLibelleGrade();
		
		//Ligne 1 du panel
		JPanel panelLigne1 = new JPanel();
		JLabel jLEleveSel = new JLabel("Vous avez selectionné l'élève : "+libelleGrade+" "+this.getEleve().getNomEleve()+" "+this.getEleve().getPrenom());
		panelLigne1.add(jLEleveSel);
		modif.add(panelLigne1);
		
		//Ligne 2 du panel
		JPanel panelLigne2 = new JPanel();
		JLabel jLAffectation = new JLabel("Affectation");
		panelLigne2.add(jLAffectation);
		
		this.jCBAffectation = new JComboBox(listeAffectation.toArray());
		panelLigne2.add(this.jCBAffectation);
		modif.add(panelLigne2);
		
		//Ligne 3 du panel
		JPanel panelLigne3 = new JPanel();
		JLabel jLDateDebutAff = new JLabel("Date de début");
		this.jTFDateDebutAff = new JTextField(10);
		panelLigne3.add(jLDateDebutAff);
		panelLigne3.add(jTFDateDebutAff);
		modif.add(panelLigne3);
		
		//Ligne 4 du panel
		JPanel panelLigne4 = new JPanel();
		JLabel jLDateFinAff = new JLabel("Date de fin");
		this.jTFDateFinAff = new JTextField(10);
		panelLigne4.add(jLDateFinAff);
		panelLigne4.add(jTFDateFinAff);
		modif.add(panelLigne4);
		
		//Ligne 5 du panel
		JPanel panelLigne5 = new JPanel();
		this.boutAjouterStage = new JButton("Ajouter");
		boutAjouterStage.addActionListener(new GestAjoutAffectation(this));
		JPanel panelBoutonAjout = new JPanel();
		panelBoutonAjout.add(boutAjouterStage);
		panelLigne5.add(panelBoutonAjout);
		modif.add(panelLigne5);

		return modif;
	}
	
	public JTextField getJTFDateDebutAff() {
		return jTFDateDebutAff;
	}
	
	public JTextField getJTFDateFinAff() {
		return jTFDateFinAff;
	}
	
	public JComboBox getJCBStage() {
		return jCBStage;
	}
	
	public JComboBox getJCBGrade() {
		return jCBGradeEleve;
	}
	
	public JComboBox getJCBAffectation() {
		return jCBAffectation;
	}

	public JTextField getJTFNomEleve() {
		return jTFNomEleve;
	}

	public JTextField getJTFPrenomEleve() {
		return jTFPrenomEleve;
	}

	public JComboBox getCBGradeEleve() {
		return jCBGradeEleve;
	}

	public JTextField getJTFDateNaissanceEleve() {
		return jTFDateNaissanceEleve;
	}

	public JComboBox getCBStage() {
		return jCBStage;
	}

	public JTextField getJTFRechercheNomEleve() {
		return jTFRechercheNomEleve;
	}

	public JTextField getJTFRecherchePrenomEleve() {
		return jTFRecherchePrenomEleve;
	}

	public JComboBox getCBRechercheStage() {
		return jCBRechercheEleve;
	}

	public String getTitre() {
		return titre;
	}
	
	public JComboBox getCBAffectation() {
		return jCBAffectation;
	}

	@Override
	public Eleve getEleve() {
		return this.eleve;
	}

	@Override
	public void setEleve(Eleve eleve) {
		this.eleve = eleve;
		
	}
	
	@Override
	public JPanel init(){
		return new JPanAjoutAffectation(this);
	}
}